/*
 * This library is free software; you can redistribute it and/or modify it under 
 * the terms of the GNU Lesser General Public License as published by the
 * Free Software Foundation; either version 2.1 of the License, or (at
 * your option) any later version. This library is distributed in the
 * hope that it will be useful, but WITHOUT ANY WARRANTY; without even
 * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
 * PURPOSE. See the GNU Lesser General Public License for more details.
 */
package dk.znz.znk.utils;

/** Provide simplified platform information. */
public final class Platform {
	public static final int UNSPECIFIED = -1;
	public static final int MAC = 0;
	public static final int LINUX = 1;
	public static final int WINDOWS = 2;
	public static final int SOLARIS = 3;
	public static final int FREEBSD = 4;
	public static final int OPENBSD = 5;
	public static final int WINDOWSCE = 6;

	private static final int osType;

	static {
		String osName = System.getProperty("os.name");
		if (osName.startsWith("Linux")) {
			osType = LINUX;
		} else if (osName.startsWith("Mac") || osName.startsWith("Darwin")) {
			osType = MAC;
		} else if (osName.startsWith("Windows CE")) {
			osType = WINDOWSCE;
		} else if (osName.startsWith("Windows")) {
			osType = WINDOWS;
		} else if (osName.startsWith("Solaris") || osName.startsWith("SunOS")) {
			osType = SOLARIS;
		} else if (osName.startsWith("FreeBSD")) {
			osType = FREEBSD;
		} else if (osName.startsWith("OpenBSD")) {
			osType = OPENBSD;
		} else {
			osType = UNSPECIFIED;
		}
	}

	private Platform() {
	}

	public static final int getOSType() {
		return osType;
	}

	public static final boolean isMac() {
		return osType == MAC;
	}

	public static final boolean isLinux() {
		return osType == LINUX;
	}

	public static final boolean isWindowsCE() {
		return osType == WINDOWSCE;
	}

	public static final boolean isWindows() {
		return osType == WINDOWS || osType == WINDOWSCE;
	}

	public static final boolean isSolaris() {
		return osType == SOLARIS;
	}

	public static final boolean isFreeBSD() {
		return osType == FREEBSD;
	}

	public static final boolean isOpenBSD() {
		return osType == OPENBSD;
	}

	public static final boolean isX11() {
		// TODO: check filesystem for /usr/X11 or some other X11-specific test
		return !Platform.isWindows() && !Platform.isMac();
	}

	public static final boolean deleteNativeLibraryAfterVMExit() {
		return osType == WINDOWS;
	}

	public static final boolean hasRuntimeExec() {
		if (isWindowsCE() && "J9".equals(System.getProperty("java.vm.name")))
			return false;
		return true;
	}
}